package card;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 苏李涛
 * Date: 2024-06-13
 * Time: 20:46
 */
public class CardDemo {
    public static final String[] suits = new String[]{"♥", "♠", "♣", "♦"};

    //1.买52张牌
    public List<Card> buyCard() {
        List<Card> cardList = new ArrayList<>();

        //1.买52张牌

        for (int i = 1; i <= 13; i++) {
            for (int j = 0; j < 4; j++) {
                //赋值，增加代码可读
                String suit = suits[j];
                int rank = i;

                //初始化构造方法
                Card card = new Card(rank, suit);
                cardList.add(card);
            }
        }
        return cardList;
    }




    //2.洗牌
    /**
     * 生成随机数，区间也是"[)"这样的，
     * 所以我们用 i 值，的前面生成随机数，然后和i位置交换
     * @return
     */
    public List<Card> shuffle(List<Card> cardList ) {
        Random random = new Random();
        for (int i = cardList.size()-1; i>0; i--) {
            int pre = random.nextInt(i);
            //这里会有，开区间数，index，这个数每次和随机数交换

            //i是下面index的值，也就是开区间的值
            swap(cardList, pre, i);
        }
        return cardList;
    }

    private void swap(List<Card> cardList, int i/*这个i是生产随机数值的，下标*/, int index/*是开区间下标*/) {
        /**注意不能注意写：因为cardList不是数组，是集合里面有数组
         *
         * cardList tmp = cardList[i]
         * index就是，生成随机数的，开区间下标 i
         * cardList[i] = cardList[index];
         * cardList[index] = tmp
         */

        //这个tmp就是，cardList.get(i)里元素的类型
        Card tmp = cardList.get(i);
        //把生成随机数下标的值，换成，随机数,开区间下标的值
        cardList.set(i, cardList.get(index));
        cardList.set(index, tmp);

    }




    //3.揭牌
    public List<List<Card>> playCard(List<Card> cardList) {
        List<List<Card>> ret = new ArrayList<>();//存放一维数组的二维数组

        //下面是三个存放玩家，抽的牌，的一维数组
       List<Card> hand0 = new ArrayList<>();
       List<Card> hand1 = new ArrayList<>();
       List<Card> hand2 = new ArrayList<>();

       ret.add(hand0);
       ret.add(hand1);
       ret.add(hand2);


        //每个人每次，抽一张，每人抽5张
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                //从上往下抽，一个删除一个，放到一维数组中，用二维数（ List<List<Card>>）组访问。
                /**
                 * 注意这里的删除，应该是，顺序表中remove,这个删除是以覆盖的形式
                 */

                //删除扑克牌对象
                Card card = cardList.remove(0);//从0位置开始覆盖

                 //把删除（覆盖）的扑克牌，放到二维数组中
                ret.get(j).add(card);
            }
        }

        return ret;//返回二维数组，用二维数组访问一维数组
    }
    
}
